const api = require("../../utils/api");
const { post } = require("../../utils/request");

Page({
  data: {
    currentStep: 1, // 当前步骤，1-头像，2-昵称，3-手机号
    isAgree: true, // 默认同意协议
    buttonColor: "#2d4581",
    buttonTextColor: "white",
    phone: "", // 手机号
    isLoading: false, // 是否在加载中
    showProfileModal: false, // 是否显示用户信息授权弹窗
    avatarUrl: "/pages/index/image/header.png", // 默认头像图片
    nickname: "", // 用户昵称
    hasChosenAvatar: false, // 是否已选择头像
  },

  onLoad: function () {
    // 页面加载时初始化
    // 检查是否有已保存的头像和昵称
    const userInfo = wx.getStorageSync("userInfo") || {};
    if (userInfo.avatarUrl) {
      this.setData({
        avatarUrl: userInfo.avatarUrl,
        hasChosenAvatar: true,
      });
    }
    if (userInfo.nickName) {
      this.setData({
        nickname: userInfo.nickName,
      });
    }
  },

  // 前往下一步
  goToNextStep: function () {
    const { currentStep, nickname } = this.data;

    // 如果是从昵称步骤进入手机号步骤，需要检查昵称是否为"微信用户"
    if (currentStep === 2) {
      // 检查昵称是否为空
      if (!nickname || nickname.trim() === "") {
        wx.showToast({
          title: "请输入您的昵称",
          icon: "none",
        });
        return;
      }

      // 检查昵称是否为"微信用户"
      if (nickname === "微信用户" || nickname.toLowerCase() === "wechat user") {
        wx.showToast({
          title: "请输入真实昵称",
          icon: "none",
        });
        return;
      }
    }

    // 进入下一步
    if (currentStep < 3) {
      this.setData({
        currentStep: currentStep + 1,
      });
    }
  },

  // 返回上一步
  goToPrevStep: function () {
    const { currentStep } = this.data;
    if (currentStep > 1) {
      this.setData({
        currentStep: currentStep - 1,
      });
    }
  },

  // 协议勾选变化
  handleAgreementChange: function (e) {
    const { isAgree } = this.data;
    // 取反当前的isAgree状态
    this.setData({
      isAgree: !isAgree,
    });
  },

  // 处理选择头像事件
  onChooseAvatar: function (e) {
    const { avatarUrl } = e.detail;
    this.setData({
      avatarUrl: avatarUrl,
      hasChosenAvatar: true,
    });

    // 将选择的头像URL存储到本地
    try {
      const userInfo = wx.getStorageSync("userInfo") || {};
      const updatedUserInfo = {
        ...userInfo,
        avatarUrl: avatarUrl,
      };
      wx.setStorageSync("userInfo", updatedUserInfo);
      wx.setStorageSync("avatarUrl", avatarUrl);

      wx.showToast({
        title: "头像已更新",
        icon: "success",
        duration: 1500,
      });
    } catch (e) {
      console.error("保存头像信息失败", e);
    }
  },

  // 处理昵称输入事件
  onInputNickname: function (e) {
    const nickname = e.detail.value;
    this.setData({
      nickname: nickname,
    });

    // 将输入的昵称存储到本地
    try {
      const userInfo = wx.getStorageSync("userInfo") || {};
      const updatedUserInfo = {
        ...userInfo,
        nickName: nickname,
      };
      wx.setStorageSync("userInfo", updatedUserInfo);
    } catch (e) {
      console.error("保存昵称信息失败", e);
    }
  },

  // 处理用户通过手机号快捷登录
  handlePhoneLogin: function (e) {
    // 判断是否成功获取
    if (e.detail.errMsg !== "getPhoneNumber:ok") {
      wx.showToast({
        title: "获取手机号失败",
        icon: "none",
      });
      return;
    }

    // 检查昵称是否填写
    if (!this.data.nickname) {
      wx.showToast({
        title: "请返回输入昵称",
        icon: "none",
      });
      return;
    }

    // 检查昵称是否为"微信用户"
    if (
      this.data.nickname === "微信用户" ||
      this.data.nickname.toLowerCase() === "wechat user"
    ) {
      wx.showToast({
        title: "请返回输入真实昵称",
        icon: "none",
      });
      this.setData({
        currentStep: 2, // 自动回到昵称输入步骤
      });
      return;
    }

    // 检查是否选择了头像
    if (!this.data.hasChosenAvatar) {
      wx.showToast({
        title: "请返回选择头像",
        icon: "none",
      });
      return;
    }

    // 检查是否同意协议
    if (!this.data.isAgree) {
      wx.showToast({
        title: "请同意用户协议",
        icon: "none",
      });
      return;
    }

    // 显示加载中
    this.setData({ isLoading: true });

    // 获取临时凭证code
    const { code } = e.detail;

    // 获取用户选择的头像和输入的昵称
    const { avatarUrl, nickname } = this.data;

    // 构建登录请求参数
    const params = {
      code: code,
      wxCode: wx.getStorageSync("wxCode") || "",
      platform: "weixin",
      role: "weixin",
      avatarUrl: avatarUrl,
      nickName: nickname,
    };
    console.log("params", params);

    // 使用request.js中的post方法调用后端接口
    post("/user/phone-login", params, { showLoading: false })
      .then((res) => {
        // 存储用户信息和token
        const { userInfo, token } = res.data;

        // 将头像和昵称添加到返回的用户信息中
        const updatedUserInfo = {
          ...userInfo,
          avatarUrl: this.data.avatarUrl,
          nickName: this.data.nickname,
        };

        wx.setStorageSync("userInfo", updatedUserInfo);
        wx.setStorageSync("token", token);
        wx.setStorageSync("avatarUrl", this.data.avatarUrl);

        // 显示成功提示
        wx.showToast({
          title: "登录成功",
          icon: "success",
        });

        // 登录成功后直接导航
        this.navigateAfterLogin();
      })
      .catch((err) => {
        // 错误已在request.js中处理，这里可以添加额外的错误处理逻辑
        console.error("登录失败:", err);
      })
      .finally(() => {
        // 无论成功失败都关闭加载状态
        this.setData({ isLoading: false });
      });
  },

  // 登录后导航
  navigateAfterLogin: function () {
    setTimeout(() => {
      wx.navigateBack({
        delta: 1,
        fail: () => {
          wx.switchTab({
            url: "/pages/my/my",
          });
        },
      });
    }, 1500);
  },

  // 使用获取到的用户信息登录
  handleLoginWithUserInfo: function (userInfo) {
    // 显示加载提示
    wx.showLoading({
      title: "登录中...",
      mask: true,
    });

    // 获取登录凭证code
    wx.login({
      success: (loginRes) => {
        // 构建登录数据
        const loginData = {
          // code: loginRes.code,
          // avatarUrl: userInfo.avatarUrl,
          username: this.data.phone, // 使用输入的手机号作为用户名
          name: userInfo.nickName,
          password: "123456",
          platform: "weixin",
          role: "weixin",
        };

        console.log("✅ 准备发送登录数据:", JSON.stringify(loginData));

        // 调用登录接口
        api.user
          .login(loginData)
          .then((res) => {
            // 保存用户信息和token到本地存储
            wx.setStorageSync("token", res.data.token);
            wx.setStorageSync("userInfo", res.data.userInfo);
            wx.setStorageSync("avatarUrl", userInfo.avatarUrl);

            wx.hideLoading();
            wx.showToast({
              title: "登录成功",
              icon: "success",
              duration: 1500,
            });

            // 成功后返回上一页
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          })
          .catch((err) => {
            console.error("❌ 登录失败:", err);
            wx.hideLoading();
            wx.showToast({
              title: err.message || "登录失败，请重试",
              icon: "none",
              duration: 2000,
            });
          })
          .finally(() => {
            this.setData({ isLoading: false });
          });
      },
      fail: (err) => {
        console.error("❌ 获取登录凭证失败:", err);
        wx.hideLoading();
        wx.showToast({
          title: "登录失败，请重试",
          icon: "none",
        });
        this.setData({ isLoading: false });
      },
    });
  },

  // 校验手机号
  validatePhoneNumber: function (phone) {
    const phoneReg = /^1[3-9]\d{9}$/;
    return phoneReg.test(phone);
  },

  // 导航到验证码页面
  navigateToVerificationCode: function () {
    if (!this.data.nickname) {
      wx.showToast({
        title: "请先输入昵称",
        icon: "none",
      });
      return;
    }

    if (!this.data.isAgree) {
      wx.showToast({
        title: "请同意用户协议",
        icon: "none",
      });
      return;
    }

    wx.navigateTo({
      url: "/pages/VerificationCode/VerificationCode",
    });
  },

  // 返回上一页
  navigateBack: function () {
    wx.navigateBack();
  },
});
